import { wxCode } from '@/api'
import { useAuthStore } from '@/store'
import { setLocal, getLocal } from '@/utils'

/**
 * @description 登录
 * 1.获取code（临时凭证）
 * 2.调后台接口，后端接口调用wxLogin获取openId等信息,判断绑定。(https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html)
 * 3.登录成功，后端返回的statusCode判断是否是第一次登录，要是第一次，那么跳转到账号绑定的页面
 */
export function wxLogin(phone: string) {
  uni.login({
    provider: 'weixin',
    success: function (res) {
      console.log('login success', res)
      if (res.code) {
        // wxCode({ jsCode: res.code })
        wxCode({ jsCode: res.code, sjh: phone })
          .then((response: any) => {
            if (response.result.resultCode === '000000') {
              console.log('登陆成功', response)
              debugger
              // 已经绑定，直接登录
              const { setAuthStore, setLqryInfo } = useAuthStore()
              const avatarUrl = getLocal('avatarUrl') || ''
              setAuthStore(
                {
                  // 后台添加一个头像字段
                  userId: response.data.lqryInfo?.lxrLxdh,
                  nickName: response.data.lqryInfo?.lxrXm,
                  // 后台没有返回的话，使用默认的微信头像
                  avatarUrl:
                    response.data.lqryInfo?.lxrXm?.avatarUrl || avatarUrl,
                  status: response.data.lqryInfo?.zt,
                  userMobile: response.data.lqryInfo?.lxrLxdh,
                  company: response.data.lqryInfo?.dwMc,
                },
                response.data.openid,
                response.data.sessionKey
              )
              setLqryInfo(response.data.lqryInfo)

              // 存入登陆成功的当前账号信息、openid 及 session_key
              setLocal('lqryInfo', response.data.lqryInfo)
              setLocal('openid', response.data.openid)
              setLocal('sessionKey', response.data.sessionKey)

              // 登陆成功后 返回到上一个页面
              const prevUrl: string = uni.getStorageSync('Url')
              if (prevUrl && prevUrl !== '/pages/home/index') {
                uni.redirectTo({ url: prevUrl })
              } else {
                uni.switchTab({ url: '/pages/home/index' })
              }


            } else {
              // 第一次登录，尚未绑定。重定向到登录绑定页面
              uni.navigateTo({
                url: '/pages/login-verify/index',
              })
            }
          })
          .catch((e: any) => {
            console.log('接口报错：', e)
          })
      } else {
        console.log('code获取失败：' + res.errMsg)
      }
    },
    fail(e) {
      console.log('login接口错误', e)
    },
    complete(e) {
      console.log(e)
    },
  })
}

/**
 * @description 检查登录态是否过期。
 * 通过 wx.login 接口获得的用户登录态拥有一定的时效性。
 * 用户越久未使用小程序，用户登录态越有可能失效。
 * 反之如果用户一直在使用小程序，则用户登录态一直保持有效。
 * 具体时效逻辑由微信维护，对开发者透明。
 * 开发者只需要调用 wx.checkSession 接口检测当前用户登录态是否有效。
 */
export function reWxLogin() {
  uni.checkSession({
    success() {
      // session_key 未过期，并且在本生命周期一直有效
    },
    fail() {
      // session_key 已经失效，需要重新执行登录流程
      wxLogin('')
    },
  })
}
